#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <semaphore.h>


//线程:条件变量
/*
主线程输入>100钱数，子线程接收到通知(xxx signal 条件变量)后，每次减少100直
到小于100会再次阻塞等待，直到再次收到条件变量发送的信号，将再次减100的操作，
循环往复
*/
int money =0;
pthread_mutex_t lock;
pthread_cond_t cond;

void* getmoney(void* arg){

    while(1){
        // sleep(1);
        pthread_mutex_lock(&lock);
        if(money < 100){
            pthread_cond_wait(&cond,&lock);
        }
            while(money >= 100){
                money -=100;
                printf("money=%d\n",money);
            }
            
        
        pthread_mutex_unlock(&lock);

        
    }


}




int main(void){

    pthread_t tid=-1;


    if(pthread_mutex_init(&lock,NULL) != 0){
        perror("pthread_mutex_init err");
        return -1;
    }
    
    if(pthread_create(&tid,NULL,getmoney,NULL) != 0){
        perror("swap_create err");
        return -1;
    }

    pthread_cond_init(&cond,NULL);

    while(1){

        sleep(1);
        pthread_mutex_lock(&lock);
        scanf("%d",&money);
        if(money >= 100){

            pthread_cond_signal(&cond);

        }

        pthread_mutex_unlock(&lock);


    }

    



    if(pthread_join(tid,NULL)){
        printf("error\n");
    }
    



}